//查询数组1不存在于数组2的元素
export const exists = (arr1,arr2)=>{
    const set1 = new Set(arr1);
    const set2 = new Set(arr2);
    const diff = [...set1].filter(x => !set2.has(x));
    return diff
}

/**
 * 两个数组均为数组对象，通过数组1中对象的ID属性值，查找在数组2中存在相同ID属性值的对象，并将其返还为新数组
 * @param {Array} arr1 
 * @param {Array} arr2 
 * @param {String} idKey 属性的键
 * @returns 
 */
export function findCommonObjectsById(arr1, arr2, idKey = 'ID') {
    // 从数组2中提取所有 id 值，存入 Set 用于快速查找
    const idSet = new Set(arr2.map(item => item[idKey]));
    // 过滤数组1，保留在数组2中存在相同 id 的对象
    return arr1.filter(item => idSet.has(item[idKey]));
}

/**
 * 两个数组均为数组对象，通过数组1中对象的ID属性值，查找在数组2中存在相同ID属性值的对象并将其删除，改变数组2。
* @param {Array} arr1 
 * @param {Array} arr2 
 * @param {String} idKey 属性的键
 * @returns  
 */
export function deleteCommonObjectsFromArr2(arr1, arr2, idKey = 'ID') {
    // 从数组1中提取所有ID值存入Set
    const idSet = new Set(arr1.map(item => item[idKey]));
    
    // 从后往前遍历数组2避免索引错位
    for (let i = arr2.length - 1; i >= 0; i--) {
      if (idSet.has(arr2[i][idKey])) {
        arr2.splice(i, 1); // 删除匹配项
      }
    }
    return arr2; // 返回修改后的数组2（可选）
}